package fr.utbm.tx52.stamp.logic.algorithm;

import fr.utbm.tx52.stamp.logic.Constant;
import fr.utbm.tx52.stamp.logic.utils.LocalizationUtil;
import java.io.File;
import java.util.Comparator;

/**
 * *
 *
 * Classe publique qui permet de d�finir le comparateur de l'objet "City" en
 * impl�mentant la classe Comparator de fichiers.
 *
 * @author Julien GONZALVES (julien.gonzalves@utbm.fr) Laurent RUBY
 * (laurent.ruby@utbm.fr)
 *
 */
public class CityComparator implements Comparator<File> {

	/**
	 * *
	 * Fonction publique qui permet de comparer deux villes � partir de deux
	 * fichiers.
	 *
	 * @param _file1 Le premier fichier qui contient une ville � comparer avec
	 * le deuxi�me fichier.
	 * @param _file2 Le deuxi�me fichier qui contient une ville � comparer avec
	 * le premier fichier.
	 *
	 * @return Une valeur enti�re positive, nulle ou n�gative 0 si les chaines
	 * de caract�res correspondant aux villes sont identiques ; 1 si la chaine
	 * de caract�res correspondant � la premi�re ville se place apr�s la chaine
	 * de caract�re de la deuxi�me ville au niveau d'un classement d'ordre
	 * alphab�tique ; -1 si la chaine de caract�res correspondant � la premi�re
	 * ville se place avant la chaine de caract�re de la deuxi�me ville au
	 * niveau d'un classement d'ordre alphab�tique.
	 */
	public int compare(File _file1, File _file2) {

		//R�cup�ration des villes pr�sentes dans chacun des fichiers et stockage de ces valeurs dans des chaines de caract�res
		String cityFile1 = LocalizationUtil.getCity(_file1);
		String cityFile2 = LocalizationUtil.getCity(_file2);

		//Si la ville du 1er fichier est inconnue mais que la ville du 2�me fichier est connue 
		//Alors on placera la 1�re ville apr�s la deuxi�me pour regrouper � la fin les fichiers dont la ville est inconnue.
		if (cityFile1.equals(Constant.FILE_CITY_UNKNOWN) && !cityFile2.equals(Constant.FILE_CITY_UNKNOWN)) {
			return 1;
		} //Sinon si la ville du 1er fichier est connue mais que la ville du 2�me fichier est inconnue 
		//Alors on placera la 1�re ville avant la deuxi�me pour regrouper � la fin les fichiers dont la ville est inconnue.
		else if (!cityFile1.equals(Constant.FILE_CITY_UNKNOWN) && cityFile2.equals(Constant.FILE_CITY_UNKNOWN)) {
			return -1;
		}

		//Sinon, on r�alise une comparaison classique puisque les deux villes sont toutes les deux connues ou inconnues
		return cityFile1.compareTo(cityFile2);
	}
}
